/**
 * WangSong 2009-6-5 上午11:58:14 v2.0 增加批量设置接口,传入一组按钮的属性信息,一次性生成按钮组
 */
package cn.biplam.front.template.base;

import cn.biplam.common.tools.TOOLS;
import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.front.html.HtmlDiv;
import cn.biplam.front.html.base.HtmlWindow;
import cn.biplam.front.html.base.Const.Float_Type;
import cn.biplam.front.template.Template;
import cn.biplam.front.template.base.Button.Button_Type;

/**
 * 按钮组模板
 * @author 	WangSong	2009-4-8 下午07:54:44
 * @version 2.0
 */
public class ButtonGroup implements Template{
	
	private HtmlDiv group;
	private Float_Type type;
	
	private int length;
	
	/**
	 * 传入 页面ID 和 选项组内按钮浮动类型 初始化
	 * @param ID	页面ID
	 * @param type	浮动类型
	 * @throws ErrorMessage 
	 */
	public ButtonGroup(String ID,Float_Type type) throws ErrorMessage{
		this.group=new HtmlDiv(ID);
		this.group.setFloat(type);
		this.type=type;
	}
	
	/**
	 * 指定宽度时,选项组容器对齐方式和按钮对齐方式相反
	 * @param ID		页面ID
	 * @param type		选项组内按钮浮动类型
	 * @param width		选项组宽度(px)
	 * @throws ErrorMessage 
	 */
	public ButtonGroup(String ID,Float_Type type,String width) throws ErrorMessage{
		this(ID,type);
		switch(type){
		case Left:
			group.setFloat(Float_Type.Right);
			break;
		case Right:
			group.setFloat(Float_Type.Left);
			break;
		case None:
		}
		this.group.setStyleWidth(width);
	}
	
	/**
	 * 设置选项组容器浮动类型
	 * @param type
	 * @throws ErrorMessage
	 */
	public void setGroupFloat(Float_Type type) throws ErrorMessage{
		this.group.setFloat(type);
	}
	
	/**
	 * 放入按钮
	 * @param button	
	 * @throws ErrorMessage
	 */
	public void put(HtmlWindow button) throws ErrorMessage{
		button.setFloat(this.type);
		group.put(button);
	}
	
	/**
	 * 传入按钮属性，创建一个按钮
	 * @param buttonID		按钮ID
	 * @param sCaption		按钮标题
	 * @param type			按钮类型
	 * @param onClick		点击脚本
	 * @throws ErrorMessage
	 */
	public void put(String buttonID,String sCaption,Button_Type type,String onClick) throws ErrorMessage{
		if(sCaption != null){
			this.length = this.length+sCaption.getBytes().length+1;
		}
		switch(type){
		case Click:
			group.put(new Button(buttonID,sCaption,onClick).get());
			break;
		case ReadOnly:
			group.put(new Button(buttonID,sCaption,type).get());
		}
	}
	
	/**
	 * 传入按钮属性，创建一个按钮
	 * @param buttonID		按钮ID
	 * @param sCaption		按钮标题
	 * @param type			按钮类型
	 * @param onClick		点击脚本
	 * @throws ErrorMessage
	 */
	public void put(String sCaption,Button_Type type,String onClick) throws ErrorMessage{
		if(sCaption != null){
			this.length = this.length+sCaption.getBytes().length+1;
		}
		switch(type){
		case Click:
			group.put(new Button(null,sCaption,onClick).get());
			break;
		case ReadOnly:
			group.put(new Button(null,sCaption,type).get());
		}
	}
	
	/**
	 * 获取按钮占位宽度
	 * @return
	 */
	public int getLength(){
		return TOOLS.getPxLength(this.length);
	}
	
	/**
	 * 返回设置好的按钮组Html对象
	 * @return HtmlDiv
	 * @throws ErrorMessage
	 */
	public HtmlDiv get() throws ErrorMessage{
		group.setLength(length);
		return group;
	}

}
